package com.example.wxCode.utils.wx;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.wxCode.utils.http.ApacheHttpUtil;
import com.example.wxCode.utils.wx.parameter.WXCodeLimit;
import com.example.wxCode.utils.wx.parameter.WXCodeunlimit;
import com.example.wxCode.utils.wx.parameter.WXQRCodeLimit;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.Buffer;
import java.nio.charset.Charset;

import static com.example.wxCode.utils.wx.constants.WXQRUrl.*;


/**
 * @Description 获取葵花码的工具
 * @Author zengzerui
 * @Date 2025/4/14
 */
@Slf4j
@Component
public class WxacodeApiUtil {
    /**
     * 获取小程序码，适用于需要的码数量极多的业务场景。
     * 通过该接口生成的小程序码，永久有效，数量暂无限制
     * @param accessToken
     * @param map
     * @return
     */
    public static String getUnlimited(String accessToken, WXCodeunlimit map) {
        String url = WX_UNLIMIT_URL + accessToken;
        String jsonString = JSON.toJSONString(map);
        byte[] data = ApacheHttpUtil.sendPost(url, jsonString);
        String qrcode = null;
        if (data != null) {
            qrcode = "data:image/jpeg;base64," + Base64.encodeBase64String(data);
        }
        return qrcode;
    }

    /**
     * 获取小程序码，适用于需要的码数量较少的业务场景。
     * 通过该接口生成的小程序码，永久有效，有数量限制.
     * @param accessToken
     * @param map
     * @return
     */
    public static String getCodelimited(String accessToken, WXCodeLimit map) {
        String url = WX_LIMIT_URL + accessToken;

        String jsonString = JSON.toJSONString(map);

        byte[] data = ApacheHttpUtil.sendPost(url, jsonString);
        String qrcode = null;
        if (data != null) {
            qrcode = "data:image/jpeg;base64," + Base64.encodeBase64String(data);
        }
        return qrcode;
    }

    /**
     * 获取小程序二维码，适用于需要的码数量较少的业务场景。
     * 通过该接口生成的小程序码，永久有效，有数量限制.
     * @param accessToken
     * @param map
     * @return
     */
    public static String getQRCodelimited(String accessToken, WXQRCodeLimit map) {
        String url = WX_QR_LIMIT_URL + accessToken;
        String jsonString = JSON.toJSONString(map);
        byte[] data = ApacheHttpUtil.sendPost(url, jsonString);
        String qrcode = null;
        if (data != null) {
            qrcode = "data:image/jpeg;base64," + Base64.encodeBase64String(data);
        }
        return qrcode;
    }

}
